﻿<!DOCTYPE html>
<html>
  <head>
    <title>spark基本原理</title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <meta name="apple-mobile-web-app-capable" content="yes"/>
    <link href="resources/css/jquery-ui-themes.css" type="text/css" rel="stylesheet"/>
    <link href="resources/css/axure_rp_page.css" type="text/css" rel="stylesheet"/>
    <link href="data/styles.css" type="text/css" rel="stylesheet"/>
    <link href="files/spark基本原理/styles.css" type="text/css" rel="stylesheet"/>
    <script src="resources/scripts/jquery-1.7.1.min.js"></script>
    <script src="resources/scripts/jquery-ui-1.8.10.custom.min.js"></script>
    <script src="resources/scripts/prototypePre.js"></script>
    <script src="data/document.js"></script>
    <script src="resources/scripts/prototypePost.js"></script>
    <script src="files/spark基本原理/data.js"></script>
    <script type="text/javascript">
      $axure.utils.getTransparentGifPath = function() { return 'resources/images/transparent.gif'; };
      $axure.utils.getOtherPath = function() { return 'resources/Other.html'; };
      $axure.utils.getReloadPath = function() { return 'resources/reload.html'; };
    </script>
  </head>
  <body>
    <div id="base" class="">

      <!-- Unnamed (矩形) -->
      <div id="u0" class="ax_default box_1">
        <div id="u0_div" class=""></div>
      </div>

      <!-- Unnamed (矩形) -->
      <div id="u1" class="ax_default box_1">
        <div id="u1_div" class=""></div>
        <div id="u1_text" class="text ">
          <p><span>客户端（Client）:我们在本地编写了spark程序，然后你必须在某台能够连接spark的机器上提交该sparl程序。</span></p>
        </div>
      </div>

      <!-- Unnamed (矩形) -->
      <div id="u2" class="ax_default box_1">
        <div id="u2_div" class=""></div>
        <div id="u2_text" class="text ">
          <p><span>Hadoop：HDFS、Hive</span></p>
        </div>
      </div>

      <!-- Unnamed (椭圆形) -->
      <div id="u3" class="ax_default ellipse">
        <img id="u3_img" class="img " src="images/spark基本原理/u3.png"/>
        <div id="u3_text" class="text ">
          <p><span>节点1：在内存中存放30万条数据</span></p>
        </div>
      </div>

      <!-- Unnamed (椭圆形) -->
      <div id="u4" class="ax_default ellipse">
        <img id="u4_img" class="img " src="images/spark基本原理/u3.png"/>
        <div id="u4_text" class="text ">
          <p><span>节点2：在内存中存放30万条数据</span></p>
        </div>
      </div>

      <!-- Unnamed (椭圆形) -->
      <div id="u5" class="ax_default ellipse">
        <img id="u5_img" class="img " src="images/spark基本原理/u3.png"/>
        <div id="u5_text" class="text ">
          <p><span>节点3：在内存中存放30万条数据</span></p>
        </div>
      </div>

      <!-- Unnamed (椭圆形) -->
      <div id="u6" class="ax_default ellipse">
        <img id="u6_img" class="img " src="images/spark基本原理/u3.png"/>
        <div id="u6_text" class="text ">
          <p><span>节点4：处理后的数据在内存里</span></p>
        </div>
      </div>

      <!-- Unnamed (椭圆形) -->
      <div id="u7" class="ax_default ellipse">
        <img id="u7_img" class="img " src="images/spark基本原理/u3.png"/>
        <div id="u7_text" class="text ">
          <p><span>节点5：处理后的数据在内存里</span></p>
        </div>
      </div>

      <!-- Unnamed (椭圆形) -->
      <div id="u8" class="ax_default ellipse">
        <img id="u8_img" class="img " src="images/spark基本原理/u3.png"/>
        <div id="u8_text" class="text ">
          <p><span>节点6：处理后的数据在内存里</span></p>
        </div>
      </div>

      <!-- Unnamed (椭圆形) -->
      <div id="u9" class="ax_default ellipse">
        <img id="u9_img" class="img " src="images/spark基本原理/u3.png"/>
        <div id="u9_text" class="text ">
          <p><span>节点7</span></p>
        </div>
      </div>

      <!-- Unnamed (椭圆形) -->
      <div id="u10" class="ax_default ellipse">
        <img id="u10_img" class="img " src="images/spark基本原理/u3.png"/>
        <div id="u10_text" class="text ">
          <p><span>节点8</span></p>
        </div>
      </div>

      <!-- Unnamed (椭圆形) -->
      <div id="u11" class="ax_default ellipse">
        <img id="u11_img" class="img " src="images/spark基本原理/u3.png"/>
        <div id="u11_text" class="text ">
          <p><span>节点9</span></p>
        </div>
      </div>

      <!-- Unnamed (矩形) -->
      <div id="u12" class="ax_default box_1">
        <div id="u12_div" class=""></div>
        <div id="u12_text" class="text ">
          <p><span>读取数据：假设90万条数据</span></p>
        </div>
      </div>

      <!-- Unnamed (矩形) -->
      <div id="u13" class="ax_default box_1">
        <div id="u13_div" class=""></div>
        <div id="u13_text" class="text ">
          <p><span>操作1：对节点1,2,3上的数据进行处理，处理后的数据，可能会移动到其他节点的内存中</span></p>
        </div>
      </div>

      <!-- Unnamed (矩形) -->
      <div id="u14" class="ax_default box_1">
        <div id="u14_div" class=""></div>
        <div id="u14_text" class="text ">
          <p><span>操作2：数据处理以后，到了节点7,8,9的内存中</span></p>
        </div>
      </div>

      <!-- Unnamed (Left Arrow) -->
      <div id="u15" class="ax_default arrow">
        <img id="u15_img" class="img " src="images/spark基本原理/u15.png"/>
      </div>

      <!-- Unnamed (Right Arrow) -->
      <div id="u16" class="ax_default arrow">
        <img id="u16_img" class="img " src="images/spark基本原理/u16.png"/>
      </div>

      <!-- Unnamed (Right Arrow) -->
      <div id="u17" class="ax_default arrow">
        <img id="u17_img" class="img " src="images/spark基本原理/u16.png"/>
      </div>

      <!-- Unnamed (Right Arrow) -->
      <div id="u18" class="ax_default arrow">
        <img id="u18_img" class="img " src="images/spark基本原理/u16.png"/>
      </div>

      <!-- Unnamed (Right Arrow) -->
      <div id="u19" class="ax_default arrow">
        <img id="u19_img" class="img " src="images/spark基本原理/u16.png"/>
      </div>

      <!-- Unnamed (Right Arrow) -->
      <div id="u20" class="ax_default arrow">
        <img id="u20_img" class="img " src="images/spark基本原理/u16.png"/>
      </div>

      <!-- Unnamed (Right Arrow) -->
      <div id="u21" class="ax_default arrow">
        <img id="u21_img" class="img " src="images/spark基本原理/u21.png"/>
      </div>

      <!-- Unnamed (Right Arrow) -->
      <div id="u22" class="ax_default arrow">
        <img id="u22_img" class="img " src="images/spark基本原理/u22.png"/>
      </div>

      <!-- Unnamed (Right Arrow) -->
      <div id="u23" class="ax_default arrow">
        <img id="u23_img" class="img " src="images/spark基本原理/u22.png"/>
      </div>

      <!-- Unnamed (Right Arrow) -->
      <div id="u24" class="ax_default arrow">
        <img id="u24_img" class="img " src="images/spark基本原理/u22.png"/>
      </div>

      <!-- Unnamed (Right Arrow) -->
      <div id="u25" class="ax_default arrow">
        <img id="u25_img" class="img " src="images/spark基本原理/u25.png"/>
      </div>

      <!-- Unnamed (矩形) -->
      <div id="u26" class="ax_default box_1">
        <div id="u26_div" class=""></div>
        <div id="u26_text" class="text ">
          <p><span>所有计算操作，都是针对多个节点上的数据，进行并行计算操作的</span></p>
        </div>
      </div>

      <!-- Unnamed (矩形) -->
      <div id="u27" class="ax_default box_1">
        <div id="u27_div" class=""></div>
        <div id="u27_text" class="text ">
          <p><span>spark集群</span></p>
        </div>
      </div>

      <!-- Unnamed (矩形) -->
      <div id="u28" class="ax_default box_1">
        <div id="u28_div" class=""></div>
        <div id="u28_text" class="text ">
          <p><span>spark程序会被提交到spark集群上进行运行</span></p>
        </div>
      </div>

      <!-- Unnamed (矩形) -->
      <div id="u29" class="ax_default box_1">
        <div id="u29_div" class=""></div>
        <div id="u29_text" class="text ">
          <p><span>Spark与MapReduce最大的不同在于，迭代式计算模型。</span></p><p><span>MapReduce，分为两个阶段，map和reduce，两个极端完了，就结束了，所以我们在一个job里能够做的很有限，只能在map和reduce里处理。</span></p><p><span><br></span></p><p><span>Spark，迭代式计算模型，可以分为n个阶段。因为它使在内存迭代式的，我们在处理完一个阶段以后，可以随便往下处理多个节点，而不再是两个阶段。所以，spark相较于MapReduce来说，计算模型可以提供更强大的功能。</span></p>
        </div>
      </div>

      <!-- Unnamed (垂直线) -->
      <div id="u30" class="ax_default arrow">
        <img id="u30_img" class="img " src="images/spark基本原理/u30.png"/>
      </div>

      <!-- Unnamed (垂直线) -->
      <div id="u31" class="ax_default arrow">
        <img id="u31_img" class="img " src="images/spark基本原理/u30.png"/>
      </div>

      <!-- Unnamed (垂直线) -->
      <div id="u32" class="ax_default arrow">
        <img id="u32_img" class="img " src="images/spark基本原理/u30.png"/>
      </div>

      <!-- Unnamed (矩形) -->
      <div id="u33" class="ax_default box_1">
        <div id="u33_div" class=""></div>
        <div id="u33_text" class="text ">
          <p><span>Hadoop的HDFS、Hive</span></p>
        </div>
      </div>

      <!-- Unnamed (矩形) -->
      <div id="u34" class="ax_default box_1">
        <div id="u34_div" class=""></div>
        <div id="u34_text" class="text ">
          <p><span>MySQL、Hbase、DB</span></p>
        </div>
      </div>

      <!-- Unnamed (矩形) -->
      <div id="u35" class="ax_default box_1">
        <div id="u35_div" class=""></div>
        <div id="u35_text" class="text ">
          <p><span>直接结果返回客户端（运行spark程序的机器和进程）</span></p>
        </div>
      </div>

      <!-- Unnamed (矩形) -->
      <div id="u36" class="ax_default box_1">
        <div id="u36_div" class=""></div>
        <div id="u36_text" class="text ">
          <p><span>每一批节点上的每一批数据，实际上就是一个RDD，一个RDD是分布式的，所以数据都散落在一批节点上了，每个节点都存储了RDD的部分partition。</span></p>
        </div>
      </div>

      <!-- Unnamed (组合) -->
      <div id="u37" class="ax_default" data-left="535" data-top="717" data-width="345" data-height="270">

        <!-- Unnamed (矩形) -->
        <div id="u38" class="ax_default box_1">
          <div id="u38_div" class=""></div>
          <div id="u38_text" class="text ">
            <p><span>Spark的核心编程是什么？</span></p>
          </div>
        </div>

        <!-- Unnamed (矩形) -->
        <div id="u39" class="ax_default box_1">
          <div id="u39_div" class=""></div>
          <div id="u39_text" class="text ">
            <p><span>第一：定义初始的RDD，就是说，你要定义一个RDD是从哪里读取数据，hdfs、linux本地文件、程序中的集合。</span></p>
          </div>
        </div>

        <!-- Unnamed (矩形) -->
        <div id="u40" class="ax_default box_1">
          <div id="u40_div" class=""></div>
          <div id="u40_text" class="text ">
            <p><span>第二：定义对RDD的计算操作，这个在spark里称之为算子，map、reduce、flatMap、groupByKey，比MapReduce提供的map和reduce强大很多。</span></p>
          </div>
        </div>

        <!-- Unnamed (矩形) -->
        <div id="u41" class="ax_default box_1">
          <div id="u41_div" class=""></div>
          <div id="u41_text" class="text ">
            <p><span>第三：其实就是循环往复的过程，第一个计算完了以后，数据可能就会到了新的一批节点上，也就是变成一个新的RDD，然后再次反复，针对新的RDD定义计算操作。</span></p>
          </div>
        </div>

        <!-- Unnamed (矩形) -->
        <div id="u42" class="ax_default box_1">
          <div id="u42_div" class=""></div>
          <div id="u42_text" class="text ">
            <p><span>第四：最后，就是获得最终的数据，将数据保存起来。</span></p>
          </div>
        </div>
      </div>

      <!-- Unnamed (图片) -->
      <div id="u43" class="ax_default _图片">
        <img id="u43_img" class="img " src="images/spark基本原理/u43.png"/>
      </div>
    </div>
  </body>
</html>
